首页
下载应用
提交文章
关于我们
🔥 热搜 🔥
1
百度
2
今日热点
3
微信公众平台
4
贴吧
5
opgg
6
dnf私服
7
百度贴吧
8
知乎
9
dnf公益服
10
百度傻逼
分类
社会
娱乐
国际
人权
科技
经济
其它
首页
下载应用
提交文章
关于我们
🔥
热搜
🔥
1
百度
2
今日热点
3
微信公众平台
4
贴吧
5
opgg
6
dnf私服
7
百度贴吧
8
知乎
9
dnf公益服
10
百度傻逼
分类
社会
娱乐
国际
人权
科技
经济
其它
这样的洞庭湖决堤,实在让人同情不起来
李尚福、魏凤和双双被拿下,与美国一份报告是否有关?
抗洪靠嘴,堵漏靠沙?印度官员真是绝了!
有的人走了,却永远活着
圈内疯传某谣言
生成图片,分享到微信朋友圈
2023年1月30日
2023年2月21日
2023年2月22日
2023年2月22日
2023年2月23日
2023年2月23日
2023年2月24日
2023年2月24日
2023年2月25日
2023年2月25日
2023年2月26日
2023年2月26日
2023年2月27日
2023年2月27日
2023年2月28日
查看原文
其他
比特币史话·72 | 智能合约(7): 多重签名
Original
刘教链
刘教链
2023-01-30
收录于合集 #史话
102个
(图片来源于网络)
前情回顾:
比特币史话·67 | 智能合约(2): 合约并不智能
比特币史话·68 | 智能合约(3): 同性恋之死
比特币史话·69 | 智能合约(4): 图灵完全吗?
比特币史话·70 | 智能合约(5): 停机问题
比特币史话·71 | 智能合约(6): 逆波兰式
正文:
有了比特币脚本的设计,我们就可以很容易实现中本聪在2008年比特币白皮书中所说的“常规的担保支付(escrow)机制很容易实现来保护买家(支付比特币的一方)”[1]。中本聪本人也亲自在2010年8月7日名为“担保支付(Escrow)”的论坛帖子里[2]对此进行了阐述:
“这是在软件中实现担保支付交易的概述。这还没有实现,我可能没时间很快实现它,只是让大家知道什么是可行的。”
“
简易
担保支付
:买家支付到担保方(escrow)。卖家收到一笔交易,但钱在担保方手里,他不能花费这笔钱,除非买家同意解锁它。买家可以在随后的任意时间解锁这笔支付,但也可以永远不解锁。这不会让买家拿回这笔钱,但除了永不解锁之外,也不会给他一个烧掉这笔钱的选项。卖家可以有一个选项退还这笔钱给买家。”
听起来这个基本逻辑和支付宝的担保支付非常相似。只是,与支付宝需要把待支付的钱交给支付宝这个“受信任的第三方”不同,比特币实现担保支付不需要把资金托管给任何受信任第三方,只需要用比特币脚本就可以完成。方法也很简单,就是使用“
多重签名脚本
”,类似下面这样:
锁定脚本
:
2 买家的公钥 卖家的公钥 2 检查多重签名(OP_CHECKMULTISIG)
解锁脚本
:
买家的签名 卖家的签名
(注:解锁脚本实际上还需要在开头加一个零操作符 OP_0,这是由于检查多重签名指令的一个小bug导致的,但是由于区块链的特点,既有实现不易改变,故而保留至今。)
锁定脚本中的第二个“2”表示一共有两个公钥,而第一个“2”表示至少需要提供2个与公钥匹配的签名才能动用这个硬币(UTXO)。
这样,一旦买家把这笔比特币用上述的锁定脚本支付出来,就需要双方共同签名才能决定是把这笔钱再转账给卖家(正常交易)还是退还给买家(交易失败)。无论是买家还是卖家,谁也不能单方面支配这笔钱。
中本聪继续写道,“尽管这样的系统不能避免双方的损失,但是至少可以拿掉作弊的获利。”“如果卖家不发货,他就不会拿到钱。买家可能仍然拿不回来钱,但是至少卖家没有金钱方面的动机不退钱给买家。”“买家不能从支付失败中获利。他不能拿回担保中的钱。他也不能以资金不足为理由而不支付。卖家能够看到担保中的资金,承诺给了他的公钥,而且不能被擅自发送给其他人。”
中本聪在8月11日又补充道,“这让它听起来似乎有些让人摸不着头脑,好像是各方即使希望合作,也无法两清。”“当你提前付款时,你也不能把它拿回来。消费者似乎对此感到心安理得。现在的这个方案不会比它差。”“任何一方都可以选择把钱放行给另外一方。”
“
提前付款
:客户损失,小偷得钱。
简易担保
:客户损失,但是小偷也拿不到钱。”
他甚至反问了一句,“难道大家是说提前付款更好些,因为至少小偷得到钱了,至少某些人得到比特币了?”
“想象有人偷了你的东西。你无法将其拿回来,但是如果它具有可以远程触发的毁灭开关,如果你可以这么做,你会这么做吗?让小偷知道你所有的一切都有毁灭开关,如果他们偷了你的东西,这对他们也是无用的,尽管您仍然会丢失它吗?如果他们把币还回来,你可以重新激活它。”“想象一下,如果金在被盗时会变成铅。如果小偷还了回来,它会再次变成黄金。”
同时,中本聪还从博弈论的角度回应了一些质疑的声音。他写道,“现在,一个经济学家会讲说,一个欺诈的卖家可以开始谈判,比如像「放款,我将一半币退还给你」,但是到那一刻,信任就太少了,以至于那样的谈判不太可能发生。如果欺诈者已经食言而肥在先,那么究竟凭什么相信他会信守承诺把一半币退还给你呢?我认为对于不大不小的金额,几乎每个人都会仅仅出于原则而予以拒绝。”
“在我看来,问题可能出在表达方式上。首先,出于探讨
博弈论
的目的,不应该对于「烧钱」的说法如此口无遮拦。这笔钱从未真正烧掉。你永远可以在任何时间选择将其放行。”
从中本聪的行文中我们可以知道,他显然是对于博弈论(game theory)有所了解的。
在2010年9月26日的论坛帖子中,中本聪又对此方案总结道,“这绝对比没有担保的直接付款要更安全,但是没有人工仲裁的担保支付那么好,假如你足够信任人类的话。”“在这种担保中,一个作弊者无法获利,但你仍然有可能损失。它至少消除了欺骗你的获利动机。卖家可以获得钱已经预备就位的保证,而买家则通过未完成交易则不付款来保留对卖家的影响力。”[3]
事实上,我们可以对中本聪给出的方案稍作改进,允许交易双方在出现争议时引入第三人仲裁,避免僵局,那么可以很方便地扩展脚本:
锁定脚本
:
2 买家的公钥 卖家的公钥 仲裁者的公钥 3 检查多重签名(OP_CHECKMULTISIG)
解锁脚本
:
签名1 签名2
(买家、卖家、仲裁者任意两方的签名均可)
这样一来,当买卖双方正常交易时,仲裁者无需做任何事情。只有当双方出现争议时,请仲裁者进行仲裁,然后决定支持买家退款,还是支持卖家收款。
由于锁定脚本是公开在区块链上的,不利于保护各方的公钥,同时,当参与方很多时,锁定脚本的长度也会比较大,因此在2012年左右,
BIP0013
(比特币改进提案13号)提案引入了一种新的比特币交易类型叫做
P2SH
(支付到脚本哈希),或者叫做“
支付到多重签名地址
”。
把上面的锁定脚本作为所谓的“
赎回脚本
”(redeem script),然后定义
新的锁定脚本
如下:
HASH160 <赎回脚本的20字节哈希值> 相等判断(OP_EQUAL)
而
新的解锁脚本
则为:
签名1 签名2 <赎回脚本>
新的锁定脚本中的赎回脚本的20字节HASH160哈希值,就是所谓的“
多重签名地址
”,又称“
多签地址
”或“
P2SH地址
”,是该提案新引入的一种新的比特币地址。这个地址使用与比特币地址相同的Base58Check编码后
以“3”开头
,比如:3DPNFXGoe8QGiEXEApQ3QtHb8wM15VCQU3。(阅读警告:不要向该地址中转入比特币。无法找回!)
这样一来,我们又可以像想象普通比特币地址那样,把上述多重签名地址想象成一个由3把锁锁住的保险箱,只有其中2把锁同时开启才能取走其中保管的比特币。
【未完待续】(公众号:刘教链)
您可能也对以下帖子感兴趣
{{{title}}}
文章有问题?点此查看未经处理的缓存